﻿namespace wwl.Contract.Dtos.Common
{
  /// <summary>
  /// 数据传输对象（DTO）的通用基类
  /// 封装所有DTO的公共属性，统一前后端/服务间的数据交互格式，适配DDD中“领域与外部隔离”的设计思想
  /// </summary>
  public class BaseDto
  {
    /// <summary>
    /// 对应领域实体的唯一标识（与领域实体<see cref="wwl.Domain.Entities.Common.BaseEntity.Id"/>映射）
    /// </summary>
    /// <remarks>
    /// 1. 用于前端识别数据唯一性（如表格行标识、编辑/删除操作的目标ID），与领域层的身份标识保持逻辑一致，但不承载领域业务规则。
    /// 2. 空字符串默认值：避免null在序列化/反序列化时导致的问题（如前端接收null字段的处理差异），确保传输数据格式稳定。
    /// </remarks>
    public string Id { get; set; } = string.Empty;

    /// <summary>
    /// 数据创建时间（与领域实体<see cref="wwl.Domain.Entities.Common.BaseEntity.CreatedTime"/>映射）
    /// </summary>
    /// <remarks>
    /// 1. 用于前端展示数据的创建时间（如列表页的“创建时间”列），通常为UTC时间转换后的本地时间。
    /// 2. 仅作为展示字段，不参与前端业务操作，与领域层的时间语义保持一致但不承载状态变更规则。
    /// </remarks>
    public DateTime CreatedTime { get; set; }

    /// <summary>
    /// 数据最后更新时间（与领域实体<see cref="wwl.Domain.Entities.Common.BaseEntity.UpdatedTime"/>映射）
    /// </summary>
    /// <remarks>
    /// 1. 用于前端展示数据的最新更新时间，辅助用户判断数据时效性。
    /// 2. 由后端领域实体状态变更时自动更新，前端无需手动设置，体现DTO“数据传输而非业务操作”的特性。
    /// </remarks>
    public DateTime UpdatedTime { get; set; }

    /// <summary>
    /// 数据创建人标识（与领域实体<see cref="wwl.Domain.Entities.Common.BaseEntity.CreatedBy"/>映射）
    /// </summary>
    /// <remarks>
    /// 1. 用于前端展示数据的创建者信息（如“创建人：admin”），支持审计追踪场景。
    /// 2. 传输层面仅保留标识（如用户ID），如需展示用户名，可通过前端额外请求用户服务获取，避免DTO承载冗余数据。
    /// </remarks>
    public string CreatedBy { get; set; } = string.Empty;

    /// <summary>
    /// 数据备注信息（与领域实体<see cref="wwl.Domain.Entities.Common.BaseEntity.Remarks"/>映射）
    /// </summary>
    /// <remarks>
    /// 1. 用于前端展示领域实体的附加说明，不影响前端核心业务逻辑，仅作为补充信息。
    /// 2. 空字符串默认值：确保传输时字段存在（避免undefined），简化前端数据处理逻辑。
    /// </remarks>
    public string Remarks { get; set; } = string.Empty;
  }
}